サブネットとインターネット通信
渡辺です。 先日より札幌オフィスに秋葉原メンバーが着ています。出張というわけではないのですが、1週間ほど札幌オフィスでリモートワーク的に仕事をしているのですが、中々出来ない仕事のスタイルですよね。
さて、本日はVPCの基本となるサブネットの話を解説したいと思います。 VPCに作成するサブネットは、大きくパブリックサブネットとプライベートサブネットに分類することが出来ます。一言でいえば、パブリックサブネットとは、InternetGateway(以下、IGW)を持ち、EIP(Public IP)を割り当てることでインターネットと通信を行うことができるサブネットです。一方、プライベートサブネットとはNATインスタンス経由でなければインターネットと通信を行うことが出来ないサブネットです(NATを設定するサブネットをプロテクトサブネットと呼ぶことがあり、本エントリでも呼んでいます)。 単純な話をするのであれば、プライベート(プロテクト)サブネットの方がセキュリティ的に、より堅牢な領域であると言えます。
簡単にまとめると各サブネットの特徴は以下の通りです。
サブネット | ルーティング | 外への通信 | 外からの通信 |
---|---|---|---|
パブリック | IGW | 可 | 可(EIP/Public IPが必要) |
プロテクト | NAT | 可 | 踏み台経由 |
プライベート | - | 不可 | 踏み台経由 |
プライベートサブネットの特徴
プライベート(プロテクト)サブネットは、NATインスタンスを介さなければインターネットと通信が出来ません。これは不正ログインなどから守るという点では大きなメリットですが、運用を行う上ではデメリットを抱えます。セキュリティ面と運用面のバランスを取る必要があります。 この時、インスタンスからインターネットへの外向きの通信と、SSHログインなどインターネットからの内向きの通信になります。
インターネットへの外向き通信とNATインスタンス
インターネットとの通信を一切必要としない場合を除き、プライベートサブネットではNATインスタンスが必要となります。NATインスタンスはmicroインスタンスで十分です。しかし、NATインスタンスを起動していればそれだけ費用が増え、構成が複雑になります。
また、yumやgemといったパッケージインストーラはインターネット通信が前提です。したがって、NATインスタンスがなければ、インストール作業やアップデート作業が出来ません。パブリックサブネット上でインスタンスを作成し、AMI経由でインスタンスを差し替える方法もありますが、どちらにせよNATインスタンスがなければ面倒です。
さらに大きな影響を与えかねないのは、NTPによる時刻同期もインターネット通信が前提です。インスタンスの時刻同期が行えないと様々な問題が発生する可能性があるでしょう。
このようにプライベートサブネットでは、現実としてNATサーバが必要となっています。
インターネットからの通信と踏み台サーバ
プライベート(プロテクト)サブネットのインスタンスにEIPを割当てても、IGWが設定されていないため、インターネット側から参照することができません。プライベートサブネットのインスタンスにSSHログインしたいならば、一端、パブリックサブネットに配置された踏み台サーバへSSHログインしてから接続する、すなわち多段SSHログインをする必要があります。
踏み台サーバを経由しなければ接続できないことはセキュリティ面では有効です。踏み台サーバを必要な時以外にSTOPすれば無駄なコストを削減することもできます。
NATサーバと踏み台サーバを兼用する
踏み台サーバをSTOPしないのであれば、NATサーバと踏み台サーバは兼用することができます。NATインスタンスといっても中身はAmazon Linuxですので、踏み台サーバとして利用すれば1台で要件を満たすからです。ただし、踏み台サーバが常時起動している状態となるため、セキュリティレベルは若干落ちるイメージです。
現実的な落としどころ
現実として、VPCを設定するならばセキュリティグループなど、他のセキュリティ関連の設定も含め、セキュリティと運用のバランスを取った落としどころを検討する必要があります。
パブリックサーバ
踏み台サーバやウェブサーバなど、EIPを付与し、インターネットからのアクセスが必要なサーバであれば、パブリックサブネットに配置する他に選択肢はありません。セキュリティ面では、必要最低限のポートを、必要最低限のアクセス場所に限定することになるでしょう。 ただし、ウェブサーバの場合、前段にELBを配置することで、EIP(Public IP)を持たない構成とすることができます。ELBでマルチAZ構成とするならば、ウェブサーバにはEIPを付与せずに踏み台経由でアクセスするか、それぞれEIPを付与して直接アクセス可能とするかの選択ができます。目安として、2台であれば運用を重視してEIPを持たせ、4台以上の場合は管理も面倒になるため、EIPを持たせないと良いかと思います。
バックエンドサーバ
データベースサーバやバッチサーバなどのバックエンドサーバは、セキュリティを考慮して直接アクセスできないことが望ましいでしょう。とはいえ、堅牢なセキュリティ要件がない限りは、完全にインターネットへのアクセスを遮断するデメリットが大きすぎるため、NATインスタンスと踏み台サーバを配置することが落としどころとなります。つまり、プライベートサブネットではなくプロテクトサブネットとします。 バックエンドサーバは、EIPを割り当てた場合でも、セキュリティグループの設定で特定IPアドレス以外のアクセスを許可しないことが出来ます。このため、EIPを割り当てたり、動的なPublic IPを割り当てても良いでしょう。
まとめ
サブネットは、InternetGateway(以下、IGW)を持ち、EIP(Public IP)を割り当てることでインターネットと通信を行うことができるパブリックサブネットと、NATインスタンスを用意しインターネットへの外向き通信のみを許可するプロテクトサブネットに分類できます。プロテクトサブネットは、外部からアクセスする場合は踏み台サーバを用意しなければなりません。NATインスタンスも用意しないプライベートサブネットを作成する場合は運用面に注意が必要です。 セキュリティ面と運用面のバランスをとってサブネットを構成してください。